package models

import (
	"gorm.io/gorm"
	"time"
)

// User 用户表结构体
type User struct {
	ID        uint64    `gorm:"column:id;primary_key;auto_increment" json:"id" form:"id"`
	Username  string    `gorm:"column:username;type:varchar(255);not_null" json:"username" form:"username"`
	Password  string    `gorm:"column:password;type:varchar(255);not_null" json:"password" form:"password"`
	Email     string    `gorm:"column:email;type:varchar(255);not_null;unique_index" json:"emails" form:"emails"`
	Phone     string    `gorm:"column:phone;type:varchar(20);not_null;unique_index" json:"phone" form:"phone"`
	Avatar    string    `gorm:"column:avatar;type:varchar(255);default:null" json:"avatar" form:"avatar"`
	CreatedAt time.Time `gorm:"column:created_at;default:CURRENT_TIMESTAMP" json:"created_at" form:"created_at"`
	UpdatedAt time.Time `gorm:"column:updated_at;default:CURRENT_TIMESTAMP;update_default:CURRENT_TIMESTAMP" json:"updated_at" form:"updated_at"`
}

// TableName 指定结构体对应的数据库表名
func (User) TableName() string {
	return "users"
}

//	GetUserByPhone
//
// 描述信息：根据用户手机号获取用户的全部信息
//
// Param：
//
//	db ：mysql链接
//	phone ：用户手机号
//
// Return：
//
//	User ：查询到的用户
//	error ：错误信息
func GetUserByPhone(db *gorm.DB, phone string) (User, error) {
	var user User
	result := db.Model(&User{}).Where("phone = ?", phone).First(&user)
	if result.Error != nil {
		return user, result.Error
	}
	return user, nil
}

//	GetUserByID
//
// 描述信息： 根据用户ID查询用户信息
//
// Param：
//
//	db ：数据库链接实例
//	userID ：用户id
//
// Return：
//
//	User ：用户对象
//	error ：错误信息
func GetUserByID(db *gorm.DB, userID uint64) (User, error) {
	var user User
	result := db.First(&user, userID)
	if result.Error != nil {
		return user, result.Error
	}
	return user, nil
}
